雖然前面的文章都只提到使用的框架以及 DB,不過我相信眼尖的人應該有發現到,這次的專案是使用 MVC 架構來進行開發。
相信大家都很常聽到 MVC 這三個字,那我自己還是想再用文字敘述一次 MVC 的概念,懂得人當複習,比較不熟的人,我們就一起學習!
真正提到 MVC 前,我們要先提到一個名詞:「關注點分離」,從字面上應該可以猜到,我們要將某些事物分清楚。
我們都希望,在開發 Function 時,希望這個 Function 越單純越好,但甚麼叫做單純?
比如說有個可以 Response Current DateTime 的 API,我們就只希望它很單純的回應日期就好,不要回應一個使用者名稱之類的額外資訊,否則使用者可能會覺得一頭霧水。
對系統架構也是一樣,資料處理邏輯(Model)、頁面顯示(View)、資料傳遞(Controller)切分得清楚,後續有人接手或是與其他人共同開發時,維護和擴充也相對清楚一點,這就是 MVC 的作用,更詳細還可以分出 Repository、Service 等,這就會提到 Design Pattern 了,不過今天不會說明。
HTML、CSS、JS 是不是一種 SoC 的實現?肯定是的吧!SoC 概念就是這樣,只要符合概念,就是一種實現,宏觀到系統與系統之間,也不是不行呢。
Model(資料模型)負責到資料庫取得資料,並且將資料持有著待後續交給 Controller,也負責系統的商業邏輯,一般來說 Model 可能會是擁有最多程式碼的地方。
但為了避免資料存取與商業邏輯擺在同個地方會越來越肥,多數的開發者會再切出 Services 層,為此減輕 Model 的程式碼。
View(檢視 or 視圖),簡單講就是畫面,接收由 Controller 傳過來的資料,並顯示在使用者眼前。
View 它或許會有許多的程式碼,但這些程式碼絕對是很單純的負責顯示資料,最多最多就是根據狀態判斷是否要顯示指定元件。
View 絕對不該負責任何的商業邏輯,即使微軟的 cshtml 提供了 Razor,好讓開發者可以用 C# 寫一些邏輯並交由框架轉成 HTML,但這絕對不會是個好方法,邏輯就該放在 Model(Services)。
Controller 可以當作 Model 與 View 之間的橋樑,並作為流程管理的腳色。
Model 向 DB 取資料,並經過商業邏輯處理後丟給 Controller;Controller 依據指定流程判斷要丟到哪個 View 或是呼叫其他 Function。
流程會像是:
反之一樣,View 丟資料到 Controller,依據流程丟到 Model,Model 再將資料傳到 DB 中。
當初聽到 SoC 這個概念時,才恍然大悟,原來自己在開發功能或是系統構想時,一個一個把 Function 設計的越符合該功能越好,並且要是單純的,或是在畫系統設計圖時,把功能寫的越細越好,都是一種 SoC 的實現。
SoC 的概念,我認為不只可以應用在程式開發,在現實生活中,安排事情、切分工作內容,我覺得都有很大的幫助。
然後這幾天突然有臨時的繁忙外務QQ,如果文章太水的話,再請見諒:(
那麼今天的內容就到這囉,我們明天見!
MVC架構是什麼?認識 Model-View-Controller 軟體設計模式
ASP.NET Core MVC 概觀